from flask import *
from exts import *
from models import *

home = Blueprint('home',__name__,url_prefix='/home')


# 获得有哪些宠物分类的列表
@home.route('/AnimeClass', methods=['GET'])
def AnimeClass():
    # 定义一个名为AnimeClass的函数，用于处理 /AnimeClass 路径的GET请求
    try:
        # 尝试获取所有的动物分类信息，这里假设animal是一个已经定义好的模块或对象，其中包含get_all_animalClass方法
        AnimeClass = animal.get_all_animalClass()
        # 在获取到的动物分类列表开头插入一个名为'热门宠物'的分类
        AnimeClass.insert(0, '热门宠物')
        return jsonify({
            "code": 200,  # 返回状态码200，表示获取分类数据成功
            "message": "获取分类数据成功",
            "data": AnimeClass  # 返回包含动物分类数据的列表
        })
    except Exception as e:
        # 如果在获取分类数据过程中出现异常
        return jsonify({
            "code": 500,  # 返回状态码500，表示获取分类数据失败
            "message": f"获取分类数据失败: {str(e)}",  # 返回包含具体错误信息的消息字符串
            "data": None  # 由于获取失败，数据部分返回None
        })
    
    
    
# 定义了两个路由装饰器来处理 /AnimeList/ 路径的GET请求
# 第一个装饰器 @home.route('/AnimeList/', defaults={'Ac': None}, methods=['GET'])
# 用于处理当访问 /AnimeList/ 路径时，没有提供Ac参数的情况，此时默认将Ac参数设为None
@home.route('/AnimeList/', defaults={'Ac': None}, methods=['GET'])  
# 第二个装饰器 @home.route('/AnimeList/<Ac>', methods=['GET'])
# 用于处理当访问 /AnimeList/ 路径并提供了Ac参数的情况，<Ac> 表示这是一个动态参数
@home.route('/AnimeList/<Ac>', methods=['GET'])  
def AnimeList(Ac):
    # 定义名为AnimeList的函数，接收一个参数Ac，根据不同情况获取不同的动物列表数据并返回相应的JSON结果

    try:
        Animeclass = Ac
        # print(Animeclass)

        # 判断Ac参数是否为None
        if Animeclass == None:
            # 如果Ac为None，调用animal模块的get_all_animal方法获取所有动物的列表
            animal_list = animal.get_all_animal()
        else:
            # 如果Ac不为None，调用animal模块的get_animal_by_class方法，根据传入的Ac参数（动物分类）获取相应分类的动物列表
            animal_list = animal.get_animal_by_class(Animeclass)

        # print('123', animal_list) 

        json_list = []
        # 如果获取到的动物列表为空
        if animal_list == []:
            return jsonify({
                "code": 500,
                "message": f"{Animeclass}的分类数据为空",
                "data": None
            })

        # 遍历获取到的动物列表
        for i in range(len(animal_list)):
            josn = {
                'id': animal_list[i].id,
                '全名': animal_list[i].全名,
                '分类': animal_list[i].分类,
                'imgPath': animal_list[i].imgPath,
            }
            json_list.append(josn)

        return jsonify({
            "code": 200,
            "message": "获取列表数据成功",
            "data": json_list
        })
    except Exception as e:
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })
    

@home.route('/hotArticles', methods=['GET'])
def hotArticles():
    try:
        articles_list = articles.hotArticleslist()
        # print(articles_list)
        # for i in range(len(articles_list)):
            # print(articles_list[i].id)
        if articles_list == []:
            return jsonify({
                "code": 500,
                "message": f"没有文章",
                "data": None
            })
        else:
            json_list  =[]
            for i in range(len(articles_list)):
                josn = {
                    'id': articles_list[i].id,
                    'title': articles_list[i].title,
                    'view_date': articles_list[i].view_date,
                    # 'contents_json': contentUcode(articles_list[i].contents_json),
                    'column': articles_list[i].column
                }
                json_list.append( josn )  
            json  = {
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_list
            }
            return jsonify(json)
    except Exception as e:
        print('错误',e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })

# 轮播图
@home.route("/hotCarousel")
def hotCarousel():
    try:
        Carousel_list = articles.hotCarousel()
        # print('Carousel_list',Carousel_list)
        # for i in range(len(Carousel_list)):
        #     print(Carousel_list[i].contents_json)
        if Carousel_list == []:
            return jsonify({
                "code": 500,
                "message": f"轮播图区域获取数据错误",
                "data": None
            })
        else:
            json_list  =[]
            for i in range(len(Carousel_list)):
                # print(Carousel_list[i].id)
                josn = {
                    'id': Carousel_list[i].id,
                    'title': Carousel_list[i].title,
                    # 'view_date': Carousel_list[i].view_date,
                    'img':getFirstImg(contentUcode(Carousel_list[i].contents_json)),
                    'column': Carousel_list[i].column
                }
                # print('123',josn)
                json_list.append( josn )  
            json  = {
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_list
            }
            return jsonify(json)
    except Exception as e:
        print('错误',e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })

@home.route('/getHotWikeArticle/<column>')
def getHotWikeArticle(column):
    try:
        articles_list = articles.getHotWikeArticle(column)
        # print('articles_list',articles_list)
        if articles_list == []:
            return jsonify({
                "code": 500,
                "message": f"获取热门知识文章为空",
                "data": None
            })
        else:
            json_list  =[]
            for i in range(len(articles_list)):
                josn = {
                    'id': articles_list[i].id,
                    'title': articles_list[i].title,
                }
                json_list.append( josn )
                # print('json',josn)
            json  = {
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_list
            }
            # print('json',json)
            return jsonify(json)
    except Exception as e:
        print('错误',e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })



@home.route('/getClassFirst/<cl>')
def getClassFirst(cl):
    # print('123123',cl)
    try:
        animal_list = animal.getClassFirst(cl)
        # print('21312',animal_list)
        if animal_list == None:
            return jsonify({
                "code": 500,
                "message": f"获取列表数据为空",
                "data": None
            })
        else:
            json_item = {
                'id': animal_list.id,
                '全名': animal_list.全名,
                '分类': animal_list.分类,
                'imgPath': animal_list.imgPath,
            }
            return jsonify({
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_item
            })
    except Exception as e:
        print('错误', e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })
    

@home.route('/getAnimeNew1/<cl>')
def getAnimeNew1(cl):
    try:
        New_list = articles.getAnimeNew1(cl)
        # print(New_list)
        # for i in range(len(articles_list)):
            # print(articles_list[i].id)
        if New_list == []:
            return jsonify({
                "code": 500,
                "message": f"AnimeNew1获取数据为空",
                "data": None
            })
        else:
            json_list  =[]
            for i in range(len(New_list)):
                josn = {
                    'id': New_list[i].id,
                    'title': New_list[i].title,
                    'content': getFirstText(contentUcode(New_list[i].contents_json)),
                    'img':getFirstImg(contentUcode(New_list[i].contents_json)),
                    'column': New_list[i].column,
                    'view_date': New_list[i].view_date
                }
                # print('123',josn)
                json_list.append( josn )  
            json  = {
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_list
            }
            return jsonify(json)
    except Exception as e:
        print('错误',e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })
    
@home.route('/getAnimeImgs/<num>')
def getAnimeImg(num):
    try:
        imgList1 = articles.getArticlesColumn('美图',num)
        if imgList1 == []:
            return jsonify({
                "code": 500,
                "message": f"获取列表数据为空",
                "data": None
            })
        else:
            json_list  =[]
            # print('12332123',imgList1[0].contents_json)
            for i in range(len(imgList1)):
                josn = {
                    'id': imgList1[i].id,
                    'title': imgList1[i].title,
                    'img': getFirstImg(contentUcode(imgList1[i].contents_json)),
                }
                # print('123',josn)
                json_list.append( josn )
            json  = {
                "code": 200,
                "message": "获取列表数据成功",
                "data": json_list
            }
            return jsonify(json)       
    except Exception as e:
        print('错误',e)
        return jsonify({
            "code": 500,
            "message": f"获取列表数据失败: {str(e)}",
            "data": None
        })



# 函数区
#  将json的unicode转码

def getFirstImg(data):
    # 遍历每一个元素
    for item in data:
        # 如果类型是 "img"，返回对应的 URL
        if item.get('type') == 'img':
            return item.get('url')
    # 如果没有找到图片类型，则返回 None 或其他标识
    return None




def contentUcode(contents_json):

    # contents_json = contents_json.replace(r"\\u", r"\u")
    # decoded_s = contents_json.encode('utf-8').decode('unicode_escape')
    # print(decoded_s)
    try:
        return json.loads(contents_json)
    except Exception as e:
        print('json解码错误',e)


def getFirstText(content):
    i=0
    # print('123',content)
    for item in content:
        if item['type'] == 'text' :
            i+=1
            if i>1:
                # print(item['url'])
                text = item['content'] 
                text = f'{text[:40]}...'
                return text
                break





